import axios from 'axios'
// 导入elementUI的loading模块
import {Loading} from 'element-ui';

import serverpath from "./serverpath";
// 导入地址配置1

axios.defaults.baseURL = serverpath;
// 创建各种不同的axios
// post-axios:json提交数据的格式
let $PostJsonAxios = axios.create({
    method: "post",
    withCredentials:true,
    timeout:10000,
    headers: {
        "Content-Type": "application/json;charset=utf-8"
    }
});

/**
 * 包含遮罩层的post请求：用来处理post请求的后台交互方法
 * @param data 传递数据对象，
 *  data格式：{
 *    ur:"/xxx",
 *    data:{ 数据格式为json对象
 *      username:"admin"
 *    }
 *  }
 *  其他相关参数也写在该参数中，具体查看axios的使用。
 * @param callback 成功回调函数
 * @param errorCallback 异常回调函数
 */
const $PostJson = function (data, callback, errorCallback) {
    // 开启遮罩层
    let loadingInstance = Loading.service({fullscreen: true});

    $PostJsonAxios(data).then(result => {
        // 关闭当前遮罩层
        loadingInstance.close();

        // 执行成功回调函数
        if (callback && typeof callback == "function") {
            callback(result);
        }

    }).catch(error => {
        // 关闭遮罩层
        loadingInstance.close();
        // 执行错误回调函数
        if (errorCallback && typeof errorCallback == "function") {
            errorCallback();
        }
        console.log(error);
    })
};

/**
 * 没有参数的post，主要针对logout这种请求，有点特殊
 * @param url
 * @param callback
 * @param errorCallback
 */
const $PostJsonNoParams = function (url, callback, errorCallback) {
    // 开启遮罩层
    let loadingInstance = Loading.service({fullscreen: true});

    $PostJsonAxios.post(url).then(result => {
        // 关闭当前遮罩层
        loadingInstance.close();

        // 执行成功回调函数
        if (callback && typeof callback == "function") {
            callback(result);
        }

    }).catch(error => {
        // 关闭遮罩层
        loadingInstance.close();
        // 执行错误回调函数
        if (errorCallback && typeof errorCallback == "function") {
            errorCallback();
        }
        console.log(error);
    })
};

/**
 * 没有遮罩层的方法，和$PostJson作用一样，只不过没有使用遮罩层，
 */

const $PostJsonNoLoading = function (data, callback, errorCallback) {
    $PostJsonAxios(data).then(result => {

        // 执行成功回调函数
        if (callback && typeof callback == "function") {
            callback(result);
        }

    }).catch(error => {
        // 执行错误回调函数
        if (errorCallback && typeof errorCallback == "function") {
            errorCallback();
        }
        console.log(error);
    })
};


const $PostForm = axios.create({
    method: "post"
});

const $Get = axios.create({
    method: "Get"
});

export default {
    "$PostJson": $PostJson,
    "$PostJsonNoLoading": $PostJsonNoLoading,
    "$PostJsonNoParams": $PostJsonNoParams,
    "$PostForm": $PostForm,
    "$Get": $Get
}




